package com.bank.rabbitmq.consumer;

import com.bank.rabbitmq.pojo.MyMessage;
import com.rabbitmq.client.Channel;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

/**
 * 消息队列的consumer实际上是底层handle方法包装调用的一个bean对象
 */
@Component
@Slf4j
public class DemoConsumer {
    //监听队列 queue_demo 实现消费
    /*@RabbitListener(queues = "queue_demo")
    public void handle(MyMessage msg){
        //String msg 是因为发送消息的时候就是字符串
        log.info("[DemoConsumer.handle] - [线程:{}] - [消息内容:{}]",Thread.currentThread().getName(),msg);
    }*/
    //如果直接接收对象数据 ,关注业务,但是有时候关注 消息完整对象,以及要手动确认
    @RabbitListener(queues = "queue_demo")
    public void handle(MyMessage msg, Message message, Channel channel){
        log.info("第二种接参方式");
        //msg 处理业务 执行消费
        //message 获取消息所有内容包括属性 头 体
        message.getMessageProperties().getHeader("name");
        //消费失败了 手动拒绝
        //channel.basicReject(message.getMessageProperties().getDeliveryTag(),false);
    }
}
